package com.bw.controller;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.bw.bean.DataBean;
import com.bw.service.DataBeanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 数据接口控制器 - 提供多种数据查询接口
 * @author admin
 * @date 2025年09月22日 14:30
 */
@RestController // 标识此类为RESTful控制器，所有方法返回值直接写入HTTP响应体
public class DataBeanController {
    @Autowired // 自动注入数据服务层Bean
    private DataBeanService dataBeanService;
    /**
     * 查询接口1 - 获取详细订单数据
     * 访问路径: /s1
     * 返回格式: {status:0, msg:"", data:{columns:[], rows:[]}}
     */
    @RequestMapping("/s1")
    public JSONObject select1(){
        JSONObject result = new JSONObject();
        result.put("status", 0); // 状态码，0表示成功
        result.put("msg", "");   // 消息内容，成功时为空

        // 创建数据对象
        JSONObject data = new JSONObject();
        result.put("data", data);

        // 创建列定义数组和数据行数组
        JSONArray columns = new JSONArray();
        JSONArray rows = new JSONArray();
        data.put("columns", columns);
        data.put("rows", rows);

        // 定义表格列信息
        JSONObject col1 = new JSONObject();
        col1.put("id", "id");      // 字段名
        col1.put("name", "序号");  // 显示中文名
        columns.add(col1);

        JSONObject col2 = new JSONObject();
        col2.put("id", "name");   // 字段名
        col2.put("name", "名称");  // 显示中文名
        columns.add(col2);

        JSONObject col3 = new JSONObject();
        col3.put("id", "cta");         // 字段名
        col3.put("name", "下单金额");   // 显示中文名
        columns.add(col3);

        JSONObject col4 = new JSONObject();
        col4.put("id", "ctb");         // 字段名
        col4.put("name", "下单次数");   // 显示中文名
        columns.add(col4);

        JSONObject col5 = new JSONObject();
        col5.put("id", "ctc");         // 字段名
        col5.put("name", "下单人数");   // 显示中文名
        columns.add(col5);

        JSONObject col6 = new JSONObject();
        col6.put("id", "ctd");         // 字段名
        col6.put("name", "实际金额");   // 显示中文名
        columns.add(col6);

        JSONObject col7 = new JSONObject();
        col7.put("id", "cte");             // 字段名
        col7.put("name", "退款金额金额");   // 显示中文名
        columns.add(col7);

        // 从服务层获取数据并填充到行中
        List<DataBean> beans = dataBeanService.select1();
        for (DataBean bean : beans) {
            JSONObject row = new JSONObject();
            row.put("id", bean.getId());
            row.put("name", bean.getName());
            row.put("cta", bean.getCta());
            row.put("ctb", bean.getCtb());
            row.put("ctc", bean.getCtc());
            row.put("ctd", bean.getCtd());
            row.put("cte", bean.getCte());
            rows.add(row);
        }

        return result;
    }

    /**
     * 查询接口2 - 获取按统计周期分类的销售数据
     * 访问路径: /s2
     * 返回格式: {status:0, msg:"", data:{columns:[], rows:[]}}
     */
    @RequestMapping("/s2")
    public JSONObject select2(){
        JSONObject result = new JSONObject();
        result.put("status", 0);
        result.put("msg", "");

        JSONObject data = new JSONObject();
        result.put("data", data);

        JSONArray columns = new JSONArray();
        JSONArray rows = new JSONArray();
        data.put("columns", columns);
        data.put("rows", rows);

        // 定义表格列信息
        JSONObject col2 = new JSONObject();
        col2.put("id", "name");           // 字段名
        col2.put("name", "统计周期");      // 显示中文名
        columns.add(col2);

        JSONObject col3 = new JSONObject();
        col3.put("id", "cta");             // 字段名
        col3.put("name", "直营金额");      // 显示中文名
        columns.add(col3);

        JSONObject col4 = new JSONObject();
        col4.put("id", "ctb");             // 字段名
        col4.put("name", "加盟店金额");    // 显示中文名
        columns.add(col4);

        // 从服务层获取数据并填充到行中
        List<DataBean> beans = dataBeanService.select2();
        for (DataBean bean : beans) {
            JSONObject row = new JSONObject();
            row.put("name", bean.getName());
            row.put("cta", bean.getCta());
            row.put("ctb", bean.getCtb());
            rows.add(row);
        }

        return result;
    }

    /**
     * 查询接口3 - 获取评价数据（适用于图表展示）
     * 访问路径: /s3
     * 返回格式: {status:0, msg:"", data:{categories:[], series:[]}}
     */
    @RequestMapping("/s3")
    public JSONObject select3(){
        JSONObject result = new JSONObject();
        result.put("status", 0);
        result.put("msg", "");

        JSONObject data = new JSONObject();
        result.put("data", data);

        // 创建分类数组和系列数组（适用于图表数据）
        JSONArray categories = new JSONArray();
        JSONArray series = new JSONArray();
        data.put("categories", categories);
        data.put("series", series);

        // 创建评价次数数据系列
        JSONObject seriesrow = new JSONObject();
        seriesrow.put("name", "评价次数");
        JSONArray dataAArray = new JSONArray();
        seriesrow.put("data", dataAArray);
        series.add(seriesrow);

        // 创建好评次数数据系列
        JSONObject seriesrow1 = new JSONObject();
        seriesrow1.put("name", "好评次数");
        JSONArray dataAArray1 = new JSONArray();
        seriesrow1.put("data", dataAArray1);
        series.add(seriesrow1);

        // 从服务层获取数据并填充到图表结构中
        List<DataBean> beans = dataBeanService.select3();
        for (DataBean bean : beans) {
            categories.add(bean.getName());    // X轴分类
            dataAArray.add(bean.getCta());    // 评价次数数据
            dataAArray1.add(bean.getCtb());    // 好评次数数据
        }

        return result;
    }

    /**
     * 查询接口4 - 获取多维订单数据（适用于多系列图表展示）
     * 访问路径: /s4
     * 返回格式: {status:0, msg:"", data:{categories:[], series:[]}}
     */
    @RequestMapping("/s4")
    public JSONObject select4(){
        JSONObject result = new JSONObject();
        result.put("status", 0);
        result.put("msg", "");

        JSONObject data = new JSONObject();
        result.put("data", data);

        JSONArray categories = new JSONArray();
        JSONArray series = new JSONArray();
        data.put("categories", categories);
        data.put("series", series);

        // 创建下单金额数据系列
        JSONObject seriesrow = new JSONObject();
        seriesrow.put("name", "下单金额");
        JSONArray dataAArray = new JSONArray();
        seriesrow.put("data", dataAArray);
        series.add(seriesrow);

        // 创建下单次数数据系列
        JSONObject seriesrow1 = new JSONObject();
        seriesrow1.put("name", "下单次数");
        JSONArray dataAArray1 = new JSONArray();
        seriesrow1.put("data", dataAArray1);
        series.add(seriesrow1);

        // 创建下单人数数据系列
        JSONObject seriesrow2 = new JSONObject();
        seriesrow2.put("name", "下单人数");
        JSONArray dataAArray2 = new JSONArray();
        seriesrow2.put("data", dataAArray2);
        series.add(seriesrow2);

        // 从服务层获取数据并填充到图表结构中
        List<DataBean> beans = dataBeanService.select4();
        for (DataBean bean : beans) {
            categories.add(bean.getName());    // X轴分类
            dataAArray.add(bean.getCta());     // 下单金额数据
            dataAArray1.add(bean.getCtb());    // 下单次数数据
            dataAArray2.add(bean.getCtc());    // 下单人数数据
        }

        return result;
    }

    /**
     * 查询接口5- 获取各个省份订单数据（适用于地图图表展示）
     * 访问路径: /s5
     * 返回格式: {status:0, msg:"", data:{ "valueName": "下单金额",
     * "mapData": [// 区域数据项...],"tooltipNames": ["下单次数", "下单人数", "实收金额", "退款成功金额"]}}
     */
    @RequestMapping("/s5")
    public JSONObject select5() {
        // 创建基础响应JSON对象
        JSONObject result = new JSONObject();
        result.put("status", 0);      // 状态码 (0表示成功)
        result.put("msg", "");         // 附加消息 (默认为空)

        // 创建数据主体对象
        JSONObject data = new JSONObject();
        result.put("data", data);      // 将数据对象挂载到响应体

        // 准备地图数据容器（JSON数组）
        JSONArray mapData = new JSONArray();
        data.put("mapData", mapData);  // 存储地理区域数据

        // 设置主数值字段名称（地图上显示的核心指标）
        data.put("valueName", "下单金额");

        // 准备工具提示字段名称（鼠标悬停时显示的辅助数据）
        JSONArray tooltipNames = new JSONArray();
        data.put("tooltipNames", tooltipNames);
        // 定义工具提示包含的四个数据维度
        tooltipNames.add("下单次数");
        tooltipNames.add("下单人数");
        tooltipNames.add("实收金额");
        tooltipNames.add("退款成功金额");

        // --- 核心数据处理逻辑 ---
        // 从服务层获取业务数据（DataBean实体列表）
        List<DataBean> beans = dataBeanService.select5();

        // 遍历并转换业务数据为前端所需格式
        for (DataBean bean : beans) {
            JSONObject row = new JSONObject();
            row.put("name", bean.getName());    // 地理区域名称
            row.put("value", bean.getCta());     // 主数值（下单金额）

            // 构建工具提示数值数组（需与tooltipNames顺序对应）
            JSONArray tooltipValues = new JSONArray();
            tooltipValues.add(bean.getCtb());   // 下单次数
            tooltipValues.add(bean.getCtc());   // 下单人数
            tooltipValues.add(bean.getCtd());   // 实收金额
            tooltipValues.add(bean.getCte());   // 退款成功金额

            row.put("tooltipValues", tooltipValues);
            mapData.add(row);  // 将区域数据加入地图数据集
        }

        return result;  // 返回完整响应结构
    }
}